﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Media;
using System.Xml.Linq;
using AIStudio.Wpf.DiagramDesigner.Geometrys;
using AIStudio.Wpf.Mind.ViewModels;

namespace AIStudio.Wpf.Mind.Helpers
{
    public static class MindThemeHelper
    {
        public static MindThemeModel GetTheme(string theme)
        {
            switch (theme)
            {
                case "SkyBlue": return GetSkyBlueTheme();
                case "SkyBlueMini": return GetSkyBlueMiniTheme();
                case "LiteratureGreen": return GetLiteratureGreenTheme();
                case "LiteratureGreenMini": return GetLiteratureGreenMiniTheme();
                case "BrainDeadPink": return GetBrainDeadPinkTheme();
                case "BrainDeadPinkMini": return GetBrainDeadPinkMiniTheme();
                case "RomanticPurple": return GetRomanticPurpleTheme();
                case "RomanticPurpleMini": return GetRomanticPurpleMiniTheme();
                case "FreshRed": return GetFreshRedTheme();
                case "FreshRedMini": return GetFreshRedMiniTheme();
                case "EarthyYellow": return GetEarthyYellowTheme();
                case "EarthyYellowMini": return GetEarthyYellowMiniTheme();
                case "CoolLightYellow": return GetCoolLightYellowTheme();
                case "CoolLightYellowMini": return GetCoolLightYellowMiniTheme();
                default: return GetSkyBlueTheme();
            }
        }

        public static MindThemeModel GetSkyBlueTheme()
        {
            return new MindThemeModel()
            {
                Name = "天空蓝",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetSkyBlueMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑蓝",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xa1, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetLiteratureGreenTheme()
        {
            return new MindThemeModel()
            {
                Name = "文艺绿",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetLiteratureGreenMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑绿",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x73, 0xbf, 0x76),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetBrainDeadPinkTheme()
        {
            return new MindThemeModel()
            {
                Name = "脑残粉",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetBrainDeadPinkMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑粉",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x94),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetRomanticPurpleTheme()
        {
            return new MindThemeModel()
            {
                Name = "浪漫紫",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetRomanticPurpleMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑紫",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0x7b, 0x73, 0xbf),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetFreshRedTheme()
        {
            return new MindThemeModel()
            {
                Name = "清新红",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetFreshRedMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑红",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x73, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetEarthyYellowTheme()
        {
            return new MindThemeModel()
            {
                Name = "泥土黄",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetEarthyYellowMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑黄",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xbf, 0x93, 0x73),
                    FontColor = Colors.White,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetCoolLightYellowTheme()
        {
            return new MindThemeModel()
            {
                Name = "冷光黄",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }
        public static MindThemeModel GetCoolLightYellowMiniTheme()
        {
            return new MindThemeModel()
            {
                Name = "紧凑黄",
                MindThemeLevel1 = new MindTheme()
                {
                    ItemWidth = 110,
                    ItemHeight = 40,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(50, 15),
                },
                MindThemeLevel2 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                },
                MindThemeLevel3 = new MindTheme()
                {
                    ItemWidth = 80,
                    ItemHeight = 25,
                    FillColor = Color.FromRgb(0xe9, 0xdf, 0x98),
                    FontColor = Colors.Black,
                    FontSize = 15,
                    Spacing = new SizeBase(15, 15),
                }
            };
        }

        public static void ThemeChange(MindNode mindNode, MindThemeModel mindThemeModel)
        {
            switch (mindNode.NodeLevel)
            {
                case 0:
                    {
                        mindNode.ItemWidth = mindThemeModel.MindThemeLevel1.ItemWidth;
                        mindNode.ItemHeight = mindThemeModel.MindThemeLevel1.ItemHeight;
                        mindNode.ColorViewModel.FillColor.Color = mindThemeModel.MindThemeLevel1.FillColor;
                        mindNode.ColorViewModel.LineColor.Color = mindThemeModel.MindThemeLevel1.FillColor;
                        mindNode.FontViewModel.FontColor = mindThemeModel.MindThemeLevel1.FontColor;
                        mindNode.FontViewModel.FontSize = mindThemeModel.MindThemeLevel1.FontSize;
                        mindNode.Spacing = mindThemeModel.MindThemeLevel1.Spacing;
                        break;
                    }
                case 1:
                    {
                        mindNode.ItemWidth = mindThemeModel.MindThemeLevel2.ItemWidth;
                        mindNode.ItemHeight = mindThemeModel.MindThemeLevel2.ItemHeight;
                        mindNode.ColorViewModel.FillColor.Color = mindThemeModel.MindThemeLevel2.FillColor;
                        mindNode.ColorViewModel.LineColor.Color = mindThemeModel.MindThemeLevel2.FillColor;
                        mindNode.FontViewModel.FontColor = mindThemeModel.MindThemeLevel2.FontColor;
                        mindNode.FontViewModel.FontSize = mindThemeModel.MindThemeLevel2.FontSize;
                        mindNode.Spacing = mindThemeModel.MindThemeLevel2.Spacing;
                        break;
                    }
                default:
                    {
                        mindNode.ItemWidth = mindThemeModel.MindThemeLevel3.ItemWidth;
                        mindNode.ItemHeight = mindThemeModel.MindThemeLevel3.ItemHeight;
                        mindNode.ColorViewModel.FillColor.Color = mindThemeModel.MindThemeLevel3.FillColor;
                        mindNode.ColorViewModel.LineColor.Color = mindThemeModel.MindThemeLevel3.FillColor;
                        mindNode.FontViewModel.FontColor = mindThemeModel.MindThemeLevel3.FontColor;
                        mindNode.FontViewModel.FontSize = mindThemeModel.MindThemeLevel3.FontSize;
                        mindNode.Spacing = mindThemeModel.MindThemeLevel3.Spacing;
                        break;
                    }
            }
        }
    }

    public class MindTheme
    {
        public double ItemWidth
        {
            get; set;
        }
        public double ItemHeight
        {
            get; set;
        }
        public Color FillColor
        {
            get; set;
        }
        public Color FontColor
        {
            get; set;
        }
        public double FontSize
        {
            get; set;
        }
        public SizeBase Spacing
        {
            get; set;
        }
    }

    public class MindThemeModel
    {
        public string Name
        {
            get; set;
        }
        public MindTheme MindThemeLevel1
        {
            get; set;
        }
        public MindTheme MindThemeLevel2
        {
            get; set;
        }
        public MindTheme MindThemeLevel3
        {
            get; set;
        }
    }
}
